(lisp-fill-paragraph): Use fill-comment-paragraph.
authorStefan Monnier <monnier@iro.umontreal.ca>
Sun, 3 Nov 2002 03:43:49 +0000 (03:43 +0000)
committerStefan Monnier <monnier@iro.umontreal.ca>
Sun, 3 Nov 2002 03:43:49 +0000 (03:43 +0000)
lisp/emacs-lisp/lisp-mode.el

index 6bdb92dd28497e31ee25361e3605d082541e5620..46f59dd57218cc30bbf1ec158a77e67e135563dd 100644 (file)
@@ -1060,99 +1060,23 @@ If any of the current line is a comment, fill the comment or the
 paragraph of it that point is in, preserving the comment's indentation
 and initial semicolons."
   (interactive "P")
-  (let (
-       ;; Non-nil if the current line contains a comment.
-       has-comment
-
-       ;; Non-nil if the current line contains code and a comment.
-       has-code-and-comment
-
-       ;; If has-comment, the appropriate fill-prefix for the comment.
-       comment-fill-prefix
-       )
-
-    ;; Figure out what kind of comment we are looking at.
-    (save-excursion
-      (beginning-of-line)
-      (cond
-
-       ;; A line with nothing but a comment on it?
-       ((looking-at "[ \t]*;[; \t]*")
-       (setq has-comment t
-             comment-fill-prefix (match-string 0)))
-
-       ;; A line with some code, followed by a comment?  Remember that the
-       ;; semi which starts the comment shouldn't be part of a string or
-       ;; character.
-       ((let ((state (syntax-ppss (line-end-position))))
-         (when (nth 4 state)
-           (goto-char (nth 8 state))
-           (looking-at ";+[\t ]*")))
-       (setq has-comment t has-code-and-comment t)
-       (setq comment-fill-prefix
-             (concat (make-string (/ (current-column) tab-width) ?\t)
-                     (make-string (% (current-column) tab-width) ?\ )
-                     (match-string 0))))))
-
-    (if (not has-comment)
-        ;; `paragraph-start' is set here (not in the buffer-local
-        ;; variable so that `forward-paragraph' et al work as
-        ;; expected) so that filling (doc) strings works sensibly.
-        ;; Adding the opening paren to avoid the following sexp being
-        ;; filled means that sexps generally aren't filled as normal
-        ;; text, which is probably sensible.  The `;' and `:' stop the
-        ;; filled para at following comment lines and keywords
-        ;; (typically in `defcustom').
-       (let ((paragraph-start (concat paragraph-start
-                                       "\\|\\s-*[\(;:\"]"))
-             ;; Avoid filling the first line of docstring.
-             (paragraph-separate
-              (concat paragraph-separate "\\|\\s-*\".*\\.$")))
-          (fill-paragraph justify))
-
-      ;; Narrow to include only the comment, and then fill the region.
-      (save-excursion
-       (save-restriction
-         (beginning-of-line)
-         (narrow-to-region
-          ;; Find the first line we should include in the region to fill.
-          (save-excursion
-            (while (and (zerop (forward-line -1))
-                        (looking-at "[ \t]*;")))
-            ;; We may have gone too far.  Go forward again.
-            (or (looking-at ".*;")
-                (forward-line 1))
-            (point))
-          ;; Find the beginning of the first line past the region to fill.
-          (save-excursion
-            (while (progn (forward-line 1)
-                          (looking-at "[ \t]*;")))
-            (point)))
-
-         ;; Lines with only semicolons on them can be paragraph boundaries.
-         (let* ((paragraph-separate (concat paragraph-separate "\\|[ \t;]*$"))
-                (paragraph-ignore-fill-prefix nil)
-                (fill-prefix comment-fill-prefix)
-                (after-line (if has-code-and-comment
-                                (line-beginning-position 2)))
-                (end (progn
-                       (forward-paragraph)
-                       (or (bolp) (newline 1))
-                       (point)))
-                ;; If this comment starts on a line with code,
-                ;; include that like in the filling.
-                (beg (progn (backward-paragraph)
-                            (if (eq (point) after-line)
-                                (forward-line -1))
-                            (point))))
-           (fill-region-as-paragraph beg end
-                                     justify nil
-                                     (save-excursion
-                                       (goto-char beg)
-                                       (if (looking-at fill-prefix)
-                                           nil
-                                         (re-search-forward comment-start-skip))))))))
-    t))
+  (or (fill-comment-paragraph justify)
+      ;; `paragraph-start' is set here (not in the buffer-local
+      ;; variable so that `forward-paragraph' et al work as
+      ;; expected) so that filling (doc) strings works sensibly.
+      ;; Adding the opening paren to avoid the following sexp being
+      ;; filled means that sexps generally aren't filled as normal
+      ;; text, which is probably sensible.  The `;' and `:' stop the
+      ;; filled para at following comment lines and keywords
+      ;; (typically in `defcustom').
+      (let ((paragraph-start (concat paragraph-start
+                                    "\\|\\s-*[\(;:\"]"))
+           ;; Avoid filling the first line of docstring.
+           (paragraph-separate
+            (concat paragraph-separate "\\|\\s-*\".*\\.$")))
+       (fill-paragraph justify))
+      ;; Never return nil.
+      t))
 
 (defun indent-code-rigidly (start end arg &optional nochange-regexp)
   "Indent all lines of code, starting in the region, sideways by ARG columns.